#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>

//进程间互斥关系
//购票问题

int ticket=10;
pthread_mutex_t mutex;

void * Entry(void * arg)
{
  (void)arg;
  while(1)
  {
    //获取互斥锁，保证下面的操作一次全部执行完（原子操作）
    pthread_mutex_lock(&mutex);
    if(ticket>0)
    {
      ticket--;
      printf("ticket:%d\n",ticket);
    }
    else
    {
      break;
    }
    pthread_mutex_unlock(&mutex);
    //释放互斥锁，保证其他线程可以进行访问
    sleep(1);
  }
  return NULL;
}

void test()
{
  pthread_t thread_1,thread_2;

  //初始化互斥量
  pthread_mutex_init(&mutex,NULL);
  //创建两个线程
  pthread_create(&thread_1,NULL,Entry,NULL);
  pthread_create(&thread_2,NULL,Entry,NULL);
  //进行线程等待
  pthread_join(thread_1,NULL);
  pthread_join(thread_2,NULL);
  //销毁互斥量
  pthread_mutex_destroy(&mutex);
}

int main()
{
  test();
  return 0;
}
